package qdu.rgzb23.broadcasts;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

/**
 * Android 广播
 * 使用观察者模式
 * 广播的接收器 BroadCastReceiver 是安卓四大组件之一
 * 1.分类
 * 系统广播/自定义广播
 *     常见系统广播：短信监听 电话监听 屏幕状态 电池状态 存储、网络等等。app可以注册相应的广播接收器来应对相应的广播事件。
 *
 * 动态/静态注册(静态注册API28后已经不提倡使用)
 *
 * 标准（无序）/有序（本例不进行探讨）
 *
 * 粘性广播、局域广播（本例不进行探讨）
 *
 * 2. 动态注册
 * 静态注册即使广播接收器所在的App退出，可以设置其继续接收广播
 * 动态注册，当广播接收器所在的Activity退出，将无法接受广播
 */
public class Mycast extends Activity {
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ly_mycast);

        //动态注册
        //1.建立广播接收器对象
        //自定义接收器的子类继承BroadcastReceiver，并重写onreceive函数
        //该函数在接收到广播后回调
        BroadcastReceiver cast_r = new BroadcastReceiver(){
            @Override
            public void onReceive(Context context, Intent intent) {
                //Toast.makeText(Mycast.this,"cast reveived....", Toast.LENGTH_LONG).show();
                int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                double per = (double) level/scale;
                if(per < 0.3)
                    Toast.makeText(Mycast.this,"battery percentary attention : lower than 30%!" , Toast.LENGTH_LONG).show();
                this.abortBroadcast();
            }
        };
        //2.创建intentfilter对象，设置隐式匹配的action
        IntentFilter ifilter = new IntentFilter();
        //ifilter.addAction("qdu.rgzb.mycast");
        ifilter.addAction("android.intent.action.BATTERY_CHANGED");
        //3.调用注册函数
        registerReceiver(cast_r,ifilter);
        //++++++++++++++++++++++发送广播******************************
        Intent it = new Intent();
        it.setAction("qdu.rgzb.mycast");
        it.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);

        //默认情况下，intent使用Intent.FLAG_EXCLUDE_STOPPED_PACKAGES
        //在安卓某版本之后，静态注册的广播接收器，在退出activity后默认是不能接受广播
        //需要对发送广播的intent对象设置FLAG_INCLUDE_STOPPED_PACKAGES状态标志，才可以

       findViewById(R.id.btn_sendcast).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendBroadcast(it);//发送广播
            }
        });
    }
}
